package com.deyuanyun.pic.ctrl.service;

import com.deyuanyun.pic.ctrl.controller.vo.CpSegmentExpandVO;
import com.deyuanyun.pic.ctrl.controller.vo.CpSegmentPlanVO;
import com.deyuanyun.pic.ctrl.controller.vo.ProtectionParamDateVO;
import com.deyuanyun.pic.ctrl.domain.CpSegment;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 *  阴保运行计划service接口
 *  @author axiao(xj08.dream@gmail.com)
 *  @date 2016-09-08
 *  @version 1.0
 *  Histroy: [修改人][时间][描述]
 */
public interface OperationPlanService {
    
    /**
     * 保存或者发布管线运行任务，适用页面整体的保存和发布操作
     * @param cpSegmentExpandVO
     * @param isRelease 是否发布
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-09-08
     */
    public void saveOrReleasePlan(CpSegmentExpandVO cpSegmentExpandVO, boolean isRelease);

    /**
     * 保存管线运行任务，适用页面单项的保存操作
     * @param
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-09-08
     */
    public ProtectionParamDateVO savePlan(CpSegmentExpandVO cpSegmentExpandVO);
    
    /**
     *  验证运行计划，存在返回CpSegment，不存在返回null
     *  @author axiao(xj08.dream@gmail.com)
     *  @date 2016-09-08
     *  @version 1.0
     *  Histroy: [修改人][时间][描述]
     */
    public CpSegment getCpSegment(CpSegment cpSegment);

    /**
     * 根据条件查询对应管线或者场站阀室用的标准，及其相关的设置项
     * @param 
     * @return 
     * @throws
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-09-12
     */
    public CpSegmentExpandVO queryCpSegmentByCondition(CpSegment cpSegment);

    /**
     * 判断管线设置运行计划的时候，起点终点是否和以前设置的数据存在交叉重合，如存在给予准确提示
     * @param pipeLineId 管道id
     * @param fromPointMileage 起点位置绝对距离
     * @param toPointMileage 终点位置绝对距离
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-09-21
     */
    public void queryCrossOverlap(String pipeLineId, Long fromPointMileage, Long toPointMileage);

    /**
     * 查询线路阴保计划列表
     * @param 
     * @return 
     * @throws
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-09-12
     */
    public List<CpSegmentPlanVO> querySegmentPlan(CpSegmentPlanVO cpSegmentPlanVO);


    /**
     * 删除线路阴保计划列表
     * @param segmentId 线路id
     * @return
     * @throws
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-09-12
     */
    public void deleteSegmentPlan(String segmentId);

    /**
     * 指定任务日历范围默认是指定年月从第一天凌晨零点整到最后一天的23:59:59相关任务的日历<br/>
     * <b>特别注意：目前只考虑了获取一个月的任务日历</b>
     * @param date 时间只要年月
     * @param pipeLineId 管道id
     * @param fromId 起点位置id
     * @param toId 终点位置id
     * @param showValveRoom 是否显示场站阀室日历
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-09-12
     */
    public Map taskCalendar(Date date, String pipeLineId, String fromId, String toId, boolean showValveRoom);

    /**
     * 腐蚀控制app获取任务日历规则
     * @return
     */
    public Map getPlans();

}
